package com.itheima.arraysort_demo.bubblesort_demo;

import java.util.Arrays;

/*
    冒泡排序 : 将一组数据按照从小到大的顺序进行排序
    冒泡排序的原理 : 相邻元素两两作比较 , 大的元素往后放

    注意 :
        1 如果有n个数据进行排序，总共需要比较n-1次
        2 每一次比较完毕，下一次的比较就会少一个数据参与

    需求 : 将数组中的元素 {3,5,2,1,4} 进行升序排序
 */
public class SortDemo {
    public static void main(String[] args) {
        int[] arr = {3, 5, 2, 1, 4};// 1 2 3 4 5
        // 使用冒泡排序对数组进行升序排序
        for (int x = 0; x < arr.length - 1; x++) { // 控制的轮次
            for (int i = 0; i < arr.length - x - 1; i++) { // 每轮相邻元素比较的次数
                // 相邻元素两两作比较
                if (arr[i] > arr[i + 1]) {
                    // 两个元素交换位置
                    int temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));


//        // 比较的第一轮
//        // arr.length - 1 : 防止数组的索引越界
//        for (int i = 0; i < arr.length - 0 - 1; i++) {
//            // 相邻元素两两作比较
//            if (arr[i] > arr[i + 1]) {
//                // 两个元素交换位置
//                int temp = arr[i];
//                arr[i] = arr[i + 1];
//                arr[i + 1] = temp;
//            }
//        }
//        System.out.println(Arrays.toString(arr));
//
//
//        // 比较的第二轮
//        // arr.length - 1 : 防止数组的索引越界
//        // arr.length - 1 - 1 : 第一个减1第二轮减少一个元素参数比较 , 第二个-1防止数组索引越界
//        for (int i = 0; i < arr.length - 1 - 1; i++) {
//            // 相邻元素两两作比较
//            if (arr[i] > arr[i + 1]) {
//                // 两个元素交换位置
//                int temp = arr[i];
//                arr[i] = arr[i + 1];
//                arr[i + 1] = temp;
//            }
//        }
//        System.out.println(Arrays.toString(arr));
//
//        // 比较的第三轮
//        // arr.length - 1 : 防止数组的索引越界
//        // arr.length - 2 - 1 : 第一个减2第三轮减少二个元素参数比较 , 第二个-1防止数组索引越界
//        for (int i = 0; i < arr.length - 2 - 1; i++) {
//            // 相邻元素两两作比较
//            if (arr[i] > arr[i + 1]) {
//                // 两个元素交换位置
//                int temp = arr[i];
//                arr[i] = arr[i + 1];
//                arr[i + 1] = temp;
//            }
//        }
//        System.out.println(Arrays.toString(arr));
//
//
//        // 比较的第四轮
//        // arr.length - 1 : 防止数组的索引越界
//        // arr.length - 3 - 1 : 第一个减3 第四轮减少三个元素参数比较 , 第二个-1防止数组索引越界
//        for (int i = 0; i < arr.length - 3 - 1; i++) {
//            // 相邻元素两两作比较
//            if (arr[i] > arr[i + 1]) {
//                // 两个元素交换位置
//                int temp = arr[i];
//                arr[i] = arr[i + 1];
//                arr[i + 1] = temp;
//            }
//        }
//        System.out.println(Arrays.toString(arr));
    }
}
